package com.pda.common.utils;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;

public interface HttpConfig {

    //配置网络
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> config(@Body RequestBody body);

    //下载数据
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> download(@Body RequestBody body);

    //下载数据
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> downloadconfig(@Body RequestBody body);

    //登录
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> login(@Body RequestBody body);

    //查询订单
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> getBillList(@Body RequestBody body);

    //提交扫描数码
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> commitCode(@Body RequestBody body);

    //同步提交扫描数码
    @POST(PDAUtil.urlhz)
    Call<ResponseBody> commitCodesync(@Body RequestBody body);

    //删除数码
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> deleteCode(@Body RequestBody body);

    //同步删除数码
    @POST(PDAUtil.urlhz)
    Call<ResponseBody> deleteCodesync(@Body RequestBody body);

    //完成订单
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> finishBill(@Body RequestBody body);

    //数码替换
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> codeReplace(@Body RequestBody body);

    //新建订单
    @POST(PDAUtil.urlhz)
    Observable<ResponseBody> createBill(@Body RequestBody body);
}

/*
 * 1 上传格式 支持三种标记类注解
 * 1.1 FormUrlEncoded：指请求体是一个Form表单，Content-Type=application/x-www-form-urlencoded，需要和参数类注解@Field，@FieldMap搭配使用
 * 1.2 Multipart：指请求体是一个支持文件上传的Form表单，Content-Type=multipart/form-data，需要和参数类注解@Part，@PartMap搭配使用
 * 1.3 Streaming：指响应体的数据以流的形式返回，如果不使用默认会把数据全部加载到内存，所以下载文件时需要加上这个注解
 *
 * 2 Headers：添加请求头，作用于方法
 * @GET("public")
 * Call<BaseResult<List<User>>> getUser(@Header("Token") String token);
 *
 * 3 Path
 * 路径参数,用于替换url路径中的变量字符替换,也就是url中的{}中的部分
 * (@Path主要用于Get请求)
 * @GET("wages/{wageId}/detail")
 * Call<VideoInfo >getVideoData(@Path("wageId") String wageId);
 * 替换部分:{wageId}中的wageId.
 *
 * 4 Query
 * 形成查询参数,将接口url中追加类似于"page=1&count=20"的字符串,形成提交给服务器端的参数,主要用于Get请求数据，用于拼接在拼接在url路径后面的查询参数
 * http://www.kuaidi100.com/query?page=1&count=20"
 * @GET("query")
 * Call QueryInfo QueryInfo(@Query("page") String page,@Query("count") String count);
 *
 * 5 QueryMap
 * 查询参数集合,将url中追加类似于"page=1&count=20"的字符串,形成提交给服务器端的参数.主要用于Get请求网络数据,效果等同于多个@Query参数拼接
 * http://www.kuaidi100.com/query?page=1&count=20"
 * @GET("query")
 * Call QueryInfo QueryInfo(@QueryMap Map<String, String> map) ;
 *
 * 6 Url
 * 使用此注解参数后,@GET后无需在添加任何内容.方法中的@Url参数可以是全路径参数,也可以是子路径参数,但是baseurl必须要指定.
 *
 * 7 Body
 * 指定一个对象作为 request body)非表单请求体
 * @POST("users/new")
 * @Headers("Content-Type:application/json")
 * Call<ResponseBody> getList(@Body RequestBody requestBody);
 *
 * 8 Field
 * 指定form表单中域中每个控件name以及相应数值 @Field的用法类似于@Query,不同的是@Field主要用于Post请求
 *  @POST("categories")
 *  @FormUrlEncoded
 *  @Headers("Content-Type:application/x-www-form-urlencoded")
 *  Call<ResponseBody> getCategories(@Field("appKey") String appKey);
 *
 * 9 FieldMap
 * 表单域集合 用于Post请求数据,@FieldMap的用法类似于@QueryMap
 *
 * 10 Part
 * Post提交分块请求 (表单字段，与 PartMap 配合，适合文件上传情况)
 *
 * 11 PartMap
 * 表单字段，与 Part 配合，适合文件上传情况；默认接受 Map<String, RequestBody> 类型，非 RequestBody 会通过 Converter 转换
 *
 * Map 用来组合复杂的参数；
 * Query、QueryMap 与 Field、FieldMap 功能一样，生成的数据形式一样；
 * Query、QueryMap 的数据体现在url上,主要用于GET请求.
 * Field、FieldMap 的数据是在请求体上,主要用于Post请求.
 */
